#!/bin/bash
set -euo pipefail

# ==================== 自动适配路径（无需修改！）====================
# 目标机器核心数据目录（与源机器一致，admin用户默认）
DEST_JENKINS_HOME="$HOME/.jenkins"
# 目标机器启动配置文件路径（admin用户LaunchAgents）
DEST_PLIST_PATH="$HOME/Library/LaunchAgents/homebrew.mxcl.jenkins-lts.plist"
# 固定配置（与源机器一致）
JENKINS_VERSION="2.479.2"
BACKUP_FILE_PATH="$HOME/Documents/Jenkins_Backup/jenkins_home_backup.tar.gz"
PLIST_BACKUP_FILE_PATH="$HOME/Documents/Jenkins_Backup/jenkins_lts_launchd_plist_backup.plist"
INSTALL_TYPE="Homebrew-LTS"
# =====================================================================

# 颜色输出函数
red() { echo -e "\033[31m$1\033[0m"; }
green() { echo -e "\033[32m$1\033[0m"; }
yellow() { echo -e "\033[33m$1\033[0m"; }
blue() { echo -e "\033[34m$1\033[0m"; }

# 1. 检查运行用户（必须是admin，与源机器一致）
if [ "$USER" != "admin" ] && [ "$(id -u -n)" != "admin" ]; then
    red "❌ 请切换到 admin 用户后运行脚本（与源机器启动用户一致）"
    red "   切换命令：su - admin（输入admin用户密码）"
#    exit 1
fi

# 2. 检查备份文件存在
if [ ! -f "$BACKUP_FILE_PATH" ]; then
    red "❌ 核心备份文件不存在：$BACKUP_FILE_PATH"
    red "   请将源机器的 Jenkins_Backup 目录放到 ~/Documents/ 下"
    exit 1
fi

# 3. 输出目标机器配置
blue "🔍 初始化目标机器配置（admin用户+M2+Jenkins LTS 2.479.2）..."
blue "✅ 目标机器配置："
blue "   运行用户：admin"
blue "   核心数据目录：$DEST_JENKINS_HOME"
blue "   启动配置文件：$DEST_PLIST_PATH"
blue "   安装版本：$JENKINS_VERSION"

# 4. 安装 Jenkins LTS 2.479.2（Homebrew 自动安装）
blue "📦 正在安装 Jenkins LTS $JENKINS_VERSION..."
# 卸载已安装的 Jenkins/Jenkins-LTS（避免版本冲突）
if brew list --versions jenkins &>/dev/null; then
    blue "⚠️  已检测到非LTS版本Jenkins，正在卸载..."
    brew uninstall jenkins -f &>/dev/null || true
fi
if brew list --versions jenkins-lts &>/dev/null; then
    installed_version=$(brew list --versions jenkins-lts | awk '{print $2}')
    if [ "$installed_version" != "$JENKINS_VERSION" ]; then
        blue "⚠️  已检测到Jenkins LTS $installed_version，正在卸载并安装 $JENKINS_VERSION..."
        brew uninstall jenkins-lts -f &>/dev/null || true
    else
        blue "✅ 已安装 Jenkins LTS $JENKINS_VERSION，跳过安装"
    fi
fi

# 安装指定版本（若未安装）
if ! brew list --versions jenkins-lts@$JENKINS_VERSION &>/dev/null && [ ! -d "/opt/homebrew/Cellar/jenkins-lts/$JENKINS_VERSION" ]; then
    if brew install "jenkins-lts@$JENKINS_VERSION" &>/dev/null; then
        brew link --overwrite "jenkins-lts@$JENKINS_VERSION" &>/dev/null || true
        green "✅ Jenkins LTS $JENKINS_VERSION 安装成功"
    else
        red "❌ Homebrew安装失败，手动下载LTS 2.479.2 PKG包："
        red "   官网地址：https://get.jenkins.io/war-stable/$JENKINS_VERSION/jenkins-$JENKINS_VERSION.pkg"
        red "   安装后重新运行脚本"
#        exit 1
    fi
fi

# 5. 停止 Jenkins LTS 服务（恢复前必须停止）
blue "🔴 正在停止 Jenkins LTS 服务..."
brew services stop jenkins-lts &>/dev/null || true
# 确保服务完全停止（避免目录占用）
launchctl unload "$DEST_PLIST_PATH" &>/dev/null || true
sleep 3
green "✅ Jenkins LTS 服务已停止"

# 6. 清理目标机器默认核心数据目录
blue "🗑️  正在清理目标机器默认Jenkins数据..."
rm -rf "$DEST_JENKINS_HOME" &>/dev/null || true
green "✅ 清理完成"

# 7. 恢复核心数据（适配隐藏目录 ~/.jenkins）
blue "🔄 正在恢复 Jenkins LTS 核心数据（可能需要几分钟）..."
tar -zxf "$BACKUP_FILE_PATH" -C "$(dirname "$DEST_JENKINS_HOME")"
if [ -d "$DEST_JENKINS_HOME" ]; then
    # 修复 admin 用户权限（关键！避免启动后无权限访问）
    chown -R "$USER:$USER" "$DEST_JENKINS_HOME"
    chmod -R 755 "$DEST_JENKINS_HOME"
    green "✅ 核心数据恢复成功，权限已修复"
else
    red "❌ 核心数据恢复失败"
    exit 1
fi

# 8. 恢复启动配置文件（保留端口/JVM参数）
if [ -f "$PLIST_BACKUP_FILE_PATH" ]; then
    blue "🔄 正在恢复启动配置文件..."
    # 覆盖目标机器的 plist 文件
    cp -p "$PLIST_BACKUP_FILE_PATH" "$DEST_PLIST_PATH"
    # 修复 plist 权限（admin用户可启动）
    chown "$USER:staff" "$DEST_PLIST_PATH"
    chmod 644 "$DEST_PLIST_PATH"
    green "✅ 启动配置恢复成功（端口/JVM参数与源机器一致）"
else
    yellow "⚠️  未找到启动配置文件，使用默认配置（端口8080）"
    yellow "   如需修改端口：编辑 $DEST_PLIST_PATH，修改 -httpPort=8080 为目标端口"
fi

# 9. 启动 Jenkins LTS 服务
blue "🟢 正在启动 Jenkins LTS 服务..."
brew services start jenkins-lts
sleep 5  # 等待服务启动完成

# 验证启动状态
if brew services list | grep -q "jenkins-lts.*started"; then
    green "✅ Jenkins LTS 2.479.2 启动成功！"
else
    red "❌ Jenkins LTS 启动失败，请查看日志排查："
    red "   tail -f $DEST_JENKINS_HOME/logs/jenkins.log"
    exit 1
fi

# 10. 最终验证提示
blue "========================================"
green "🎉 Jenkins LTS 2.479.2 迁移恢复完成！（完全适配你的环境）"
yellow "⚠️  必做验证步骤："
yellow "   1. 浏览器访问：http://$(hostname -I | awk '{print $1}'):8080（端口与源机器一致）"
yellow "   2. 用源机器的 admin 用户账号密码登录（凭证已恢复）"
yellow "   3. 验证：Manage Jenkins → Manage Jobs（任务是否完整）"
yellow "   4. 验证：Manage Jenkins → Manage Plugins（插件是否正常）"
yellow "   5. 重新配置：全局工具路径（Git/Maven/JDK等，目标机器路径可能不同）"
blue "========================================"
blue "ℹ️  常用命令："
blue "   查看日志：tail -f $DEST_JENKINS_HOME/logs/jenkins.log"
blue "   停止服务：brew services stop jenkins-lts"
blue "   启动服务：brew services start jenkins-lts"
blue "   重启服务：brew services restart jenkins-lts"
